package com.ysjy.course.service;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageInfo;
import com.wkbb.common.base.BaseService;
import com.wkbb.common.dto.ResultDTO;
import com.wkbb.common.dto.basic.UserDto;
import com.wkbb.common.dto.course.CourseClassDto;
import com.wkbb.common.dto.course.CourseTimeDto;
import com.ysjy.course.dto.AttendDto;
import com.ysjy.course.dto.CourseAttendDto;
import com.ysjy.course.dto.SignUpUserDto;
import com.ysjy.course.dto.TeacherCourseTimeFeedbackDto;
import com.ysjy.course.model.*;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Map;

public interface CourseClassService extends BaseService<CourseClassDto> {

    ResultDTO<Boolean> putCourseClass(CourseClassDto data) throws Exception;

    List<CourseClassDto> getCourseClassListByStudent(Map<String, Object> params);

    void joinClassBySignUpUser(SignUpUser signUpUser);

    ResultDTO<Boolean> stuChangeClass(Long signUpUserId, Long newClassId, String way, UserDto userDto) throws Exception;

    List<CourseTimeDto> getCourseTimeList(Map<String, Object> params);

    List<String> getHaveClassByMonth(Map<String, Object> params);

    PageInfo<SignUpUserDto> getCourseClassStudentListByPage(Map<String, Object> params, int pageNo, int pageSize);

    ResultDTO<Boolean> generateCourseTime(String serviceUniqueId, Integer classType, Long classId);

    ResultDTO<Boolean> applyChangeClass(Long signUpUserId, Long newClassId, String way);

    PageInfo<ClassChangeApply> getChangeClassApplyListByPage(Map<String, Object> params, int pageNo, int pageSize);

    ResultDTO<Boolean> auditChangeClass(Long id, Integer state, UserDto userDto);

    Map<String, Object> getCourseTimeCountByMonth(Map<String, Object> params);

    ResultDTO<Boolean> putCourseTimeLeave(CourseAttendLeave data) throws Exception;

    ResultDTO<Boolean> putCourseTimeFeedback(CourseTimeFeedback data) throws Exception;

    ResultDTO<Boolean> putCourseFeedback(CourseFeedback data) throws Exception;

    List<CourseClassDto> getCourseClassListByTeacher(Map<String, Object> params);

    List<CourseAttendDto> getCourseTimeAttendStuList(Map<String, Object> params);

    ResultDTO<Boolean> putCourseTimeAttend(List<CourseAttendDto> list) throws Exception;

    ResultDTO<CourseClassDto> getCourseClass(Integer classId);

    ResultDTO<Boolean> putMessage(YsMessage data) throws Exception;

    PageInfo<YsMessage> getMessageListByPage(Map<String, Object> params, int pageNo, int pageSize);

    Map<String, Object> getMessageCount(Map<String, Object> params);

    YsMessage getMessage(Long studentId, Long id);

    ResultDTO<Boolean> putTeacherCourseTimeFeedback(TeacherCourseTimeFeedback data) throws Exception;

    ResultDTO<Boolean> likeTeacherCourseTimeFeedback(TeacherCourseTimeFeedbackLike data) throws Exception;

    ResultDTO<Boolean> commentTeacherCourseTimeFeedback(TeacherCourseTimeFeedbackLike data) throws Exception;

    PageInfo<TeacherCourseTimeFeedbackDto> getTeacherCourseTimeFeedbackListByStudent(Map<String, Object> params, int pageNo, int pageSize);

    PageInfo<TeacherCourseTimeFeedbackDto> getTeacherCourseTimeFeedbackListByPage(Map<String, Object> params, int pageNo, int pageSize);

    PageInfo<AttendDto> getCourseTimeAttendListByPage(Map<String, Object> params, int pageNo, int pageSize);
}
